package com.bstek.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.util.List;

/**
 * 题目实体领域
 * @author gehongbin
 * @date: 2021/10/8
 */
@Data
public class ItemEntity {
    private String id;

    /**
     * sim哈希
     */
    private String simhash;

    /**
     * 是否删除
     */
    private Boolean deleted;

    /**
     * 删除人
     */
    private String deleter;

    /**
     * 题目难度
     */
    private Integer difficulty;

    /**
     * svg标识
     */
    private String svgUrl;

    /**
     * 是否难度初始化标识
     */
    private Boolean difficultyDefault;

    /**
     * 创建时间
     */
    private Double ctime;

    /**
     * 创建人
     */
    private String creator;

    /**
     * 更新时间
     */
    private Double mtime;

    /**
     * 更新人
     */
    private String updater;

    /**
     * 主体内容
     */
    private Data data;

    /**
     * 学段
     */
    private Integer edu;

    /**
     * 学科
     */
    private Integer subjectId;

    /**
     * 最近处理日志
     */
    private String logId;

    /**
     * 摘要
     */
    private String digest;

    /**
     * 是否规范
     */
    private boolean convert;

    /**
     * 是否复合题
     */
    private Integer isComplex;

    /**
     * 题库（大题库，背诵库，视频互动库）
     */
    private Integer libType;

    /**
     * 音频
     */
    private List<ItemAudioEntity> audioList;

    private String email;

    /**
     * 来源id（图谱关卡id）
     */
    private String sourceId;

    /**
     * 来源类型（三宝类型）
     */
    private Integer sourceType;

    /**
     * 操作类型（1复制  2录入 3更新 4改编）
     */
    private Integer operationType;

    /**
     * 基本信息
     */
    private ItemLakeEntity itemLakeEntity;

    /**
     * 来源信息
     */
    private List<ItemAttrsEntity> itemAttrsList;

    @lombok.Data
    @ToString
    public static class Data {

        /**
         * 大题题型
         */
        private Integer type;

        /**
         * 单句/篇章
         */
        private Integer interactiveType;

        /**
         * 大题题干
         */
        private String stem;

        /**
         * 小题
         */
        private List<Qs> qs;

        /**
         * 大题选项（七选五）
         */
        private List<MainOption> mainOptions;
    }

    @lombok.Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class MainOption {
        /**
         * 题目选项
         */
        private String text;
    }

    @lombok.Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Qs {

        /**
         * 小题主键
         */
        private String id;

        /**
         * 小题题型
         */
        private Integer subtype;

        /**
         * 原小题题型
         */
        private String originQsId;

        /**
         * 小题题干
         */
        private String desc;

        /**
         * 小题选项
         */
        private List<String> opts;

        /**
         * 选项排版 1 一行一个，2 一行两个， 4 一行四个
         */
        private Integer axis;

        /**
         * 备注
         */
        private String step;

        /**
         * 答案（外层代表第几个空，内层代表备选答案）
         */
        private List<QsAnswer> answers;

        /**
         * 答案可交换的分组（外层是多个答案组，内层是几个答案无序（存的是answers的外层序号））
         * 例如：一道题四个空，答案answers[[a][b][c][d]]，答案组answer_groups[[0,1][2,3]]代表a，b可颠倒；c，d可颠倒
         */
        private List<QsAnswerGroup> answerGroups;

        /**
         * 是否显示解析
         */
        private Boolean ifAnalyze;

        /**
         * 解析(外层是多个解法，底层是分步解析)
         */
        private List<QsAnalyze> analyzes;

        /**
         * 作答字数限制（作文题）
         */
        private AnswerTextLimit answerTextLimit;

        /**
         * 连线题矩阵（连线题）
         * 先列后行 lineOptions.get(0)代表第一列
         *
         */
        private List<LineOption> lineOptions;

        /**
         * 答题卡图片（作图题）
         */
        private String answerCardImage;

        /**
         * 答案是否客观（可否自动判题用）
         */
        private boolean answerObjective;

        /**
         * 判断题交互样式（T/F,Y/N,A/B,W/R,对错符号,对/错）
         */
        private Integer interactiveStyle;

        /**
         * 是否有标准答案 (1:有标注答案，2:无标准答案)
         */
        private Integer hasStandardAnswer;

        /**
         * 评价分段Code (1[0-5], 2[0-10])
         */
        private Integer ratingRangeCode;

        /**
         * 评价样式Code 1(数字)/2(星星)/3(点赞)/4(笑脸)
         */
        private Integer ratingStyleCode;

        /**
         * 评分分段说明(左)
         */
        private String leftScoreDesc;

        /**
         * 评分分段说明(右)
         */
        private String rightScoreDesc;
    }

    @lombok.Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class QsAnswerGroup {

        /**
         * 答案下标组
         */
        List<Integer> answerIndexes;
    }

    @lombok.Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class QsAnswer {
        /**
         * 答案文本
         */
        List<String> texts;
    }

    @lombok.Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class QsAnalyze {

        /**
         * 解析ID
         */
        private String id;

        /**
         * 解析文本
         */
        private List<String> texts;

        /**
         * 解析类型，和文本数量有关
         */
        private Integer type;

        /**
         * 是否删除 （逻辑删）
         */
        private boolean deleted;

    }

    @lombok.Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class AnswerTextLimit {

        /**
         * 最大字数
         */
        private Integer max;
        /**
         * 最小字数
         */
        private Integer min;
    }

    @lombok.Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class LineOption {

        /**
         * 选项文本
         */
        List<String> texts;
    }



}